home *** CD-ROM | disk | FTP | other *** search
/ com!online 2005 May / com_0505_1.iso / opensource / top10 / amc_install.exe / {app} / Scripts / tvtome.ifs < prev    next >
Encoding:
Text File  |  2004-04-04  |  9.1 KB  |  289 lines

  1. // SCRIPTING
  2. // StarGate SG-1 TV Tome import
  3. // Created by Alex Iribarren
  4. // http://alex.iribarren.com
  5. // Last update 04/04/2004
  6.  
  7. (***************************************************
  8. *  Episode importation script for:                *
  9. *      TV Tome, http://www.tvtome.com             *
  10. *                                                 *
  11. *  (c) 2003 Alex Iribarren     alexiri@terra.es   *
  12. *                                                 *
  13. *  Modified version of IMDB batch import by:      *
  14. *    Antoine Potten    antoine@buypin.com         *
  15. *      Contributors :                             *
  16. *       Danny Falkov                              *
  17. *       Kai Blankenhorn                           *
  18. *                                                 *
  19. *  For use with Ant Movie Catalog 3.4.0           *
  20. *  www.ant.be.tf/moviecatalog ╖╖╖ www.buypin.com  *
  21. *                                                 *
  22. *  The source code of the script can be used in   *
  23. *  another program only if full credits to        *
  24. *  script author and a link to Ant Movie Catalog  *
  25. *  website are given in the About box or in       *
  26. *  the documentation of the program               *
  27. ***************************************************)
  28.  
  29. program TvTome;
  30.  
  31. //Constants
  32. Const
  33.   AddNotes = true;
  34.  
  35. var
  36.   EpName, EpNumber: string;
  37.   MovieName: string;
  38.  
  39. function FindLine(Pattern: string; List: TStringList; StartAt: Integer): Integer;
  40. var
  41.   i: Integer;
  42. begin
  43.   result := -1;
  44.   if StartAt < 0 then
  45.     StartAt := 0;
  46.   for i := StartAt to List.Count-1 do
  47.     if Pos(Pattern, List.GetString(i)) <> 0 then
  48.     begin
  49.       result := i;
  50.       Break;
  51.     end;
  52. end;
  53.  
  54. procedure AnalyzePage(Address: string);
  55. var
  56.   Page: TStringList;
  57.   LineNr, StartPos: Integer;
  58.   Line, Season: string;
  59. begin
  60.   Page := TStringList.Create;
  61.   Page.Text := GetPage(Address);
  62.  
  63.   PickTreeClear;
  64.   PickTreeAdd('Searching for ' + EpName, '');
  65.   LineNr := 0;
  66.   Address := '';
  67.  
  68.   repeat
  69.     LineNr := FindLine('<tr><td colspan="6"><', Page, LineNr);
  70.     if LineNr > -1 then
  71.     begin
  72.       Line := Page.GetString(LineNr);
  73.       StartPos := pos('<b>', Line) + 3;
  74.       Season := copy(Line, StartPos, pos('</b>', Line) - StartPos);
  75.       PickTreeAdd(Season + ':', '');
  76.       Address := AddEpisodeTitles(Page, LineNr);
  77.       if (Address <> '') then Break;
  78.       LineNr := LineNr + 1;
  79.     end;
  80.   until (LineNr < 0);
  81.  
  82.   if (Address <> '') then
  83.   begin
  84.     AnalyzeEpisodePage(Address);
  85.   end else begin
  86.     if PickTreeExec(Address) then
  87.       AnalyzeEpisodePage(Address);
  88.   end;
  89.   Page.Free;
  90. end;
  91.  
  92. procedure AnalyzeEpisodePage(Address: string);
  93. var
  94.   Line, TempStr: string;
  95.   BeginPos: Integer;
  96.   Page: TStringList;
  97.   LineNr: Integer;
  98. begin
  99.   Page := TStringList.Create;
  100.   Page.Text := GetPage(Address);
  101.  
  102.   // URL
  103.   SetField(fieldURL, Address);
  104.  
  105.   // Episode Number
  106.   if EpNumber <> '' then
  107.     SetField(fieldTranslatedTitle, EpNumber);
  108.  
  109.   // Original Title
  110.   LineNr := FindLine('<table width=777><tr><td align=center>', Page, 0)+1;
  111.   Line := Page.GetString(LineNr);
  112.   CutAfter(Line,'<h1>');
  113.   SetField(fieldOriginalTitle, copy(Line, 1, pos('</h1>',Line)-1));
  114.  
  115.   // First Aired
  116.   LineNr := FindLine('>First Aired<', Page, 0);
  117.   Line := Page.GetString(LineNr);
  118.   CutAfter(Line,'First Aired</td><td class="row');
  119.   SetField(fieldComments, 'First aired: ' + copy(Line, 4, pos('</td></tr>',Line)-4));
  120.   SetField(fieldYear, copy(Line, pos(', ',Line)+2, 4));
  121.  
  122.   // Rating
  123.   LineNr := FindLine('nowrap>Avg. Rating:</td>', Page, 0);
  124.   Line := Page.GetString(LineNr);
  125.   TempStr := Line + #13#10;
  126.   CutAfter(Line,'</td><td>');
  127.   SetField(fieldRating,copy(Line, 1, pos('.',Line)-1));
  128.   LineNr := FindLine('nowrap>Votes Cast:</td>', Page, 0);
  129.   Line := Page.GetString(LineNr);
  130.   TempStr := TempStr + Line + #13#10;
  131.   Line := Page.GetString(LineNr + 1);
  132.   TempStr := TempStr + Line + #13#10;
  133.   TempStr := StringReplaceAll(TempStr, '</td><td>', ' ');
  134.   HTMLRemoveTags(TempStr);
  135.   SetField(fieldComments, GetField(fieldComments)
  136.       + #13#10'-------------------------------------------------------------------------------'#13#10
  137.       +'RATINGS:' + #13#10 + TempStr);
  138.  
  139.   // Production Code
  140.   LineNr := FindLine('>Production Code<', Page, 0);
  141.   Line := Page.GetString(LineNr);
  142.   CutAfter(Line,'Production Code</td><td class="row2">');
  143.   IF Line <> '' then SetField(fieldMedia,'Production Code: ' + copy(Line, 1, pos('</td></tr>',Line)-1));
  144.  
  145.   // Writer
  146.   LineNr := FindLine('>Writer<', Page, 0);
  147.   Line := Page.GetString(LineNr);
  148.   CutAfter(Line,'<nobr>');
  149.   TempStr := copy(Line, 1, pos('</nobr><br></td></tr>',Line)-1);
  150.   HTMLRemoveTags(TempStr);
  151.   SetField(fieldProducer, 'Writer: ' + TempStr);
  152.  
  153.   // Director
  154.   LineNr := FindLine('>Director<', Page, 0);
  155.   Line := Page.GetString(LineNr);
  156.   CutAfter(Line,'<nobr>');
  157.   TempStr := copy(Line, 1, pos('</nobr><br></td></tr>',Line)-1);
  158.   HTMLRemoveTags(TempStr);
  159.   SetField(fieldDirector, TempStr);
  160.  
  161.   // Guest Stars
  162.   LineNr := FindLine('<b>Guest Stars:</b>', Page, 0) + 1;
  163.   TempStr := Page.GetString(LineNr-1);
  164.   repeat
  165.     Line := Page.GetString(LineNr);
  166.     TempStr := TempStr + copy(Line, pos('">',Line) + 2, pos('</nobr>',Line)) + #13#10;
  167.     LineNr := LineNr + 1;
  168.   until (pos('</td></tr>', Line) > 0);
  169.   HTMLRemoveTags(TempStr);
  170.   SetField(fieldActors, TempStr);
  171.  
  172.   // Description
  173.   LineNr := FindLine('<a name="synopsis">', Page, 0);
  174.   LineNr := FindLine('<tr><td>', Page, LineNr) + 1;
  175.   TempStr := '';
  176.   repeat
  177.     Line := Page.GetString(LineNr);
  178.     TempStr := TempStr + Line;
  179.     LineNr := LineNr + 1;
  180.   until (pos('</td></tr>', Line) > 0);
  181.   TempStr := StringReplaceAll(TempStr, '<br>', #13#10);
  182.   HTMLRemoveTags(TempStr);
  183.   
  184.   // Notes
  185.   if AddNotes then
  186.   begin
  187.     LineNr := FindLine('<a name="notes">', Page, 0);
  188.     LineNr := FindLine('<tr><td>', Page, LineNr) + 1;
  189.     TempStr := TempStr + #13#10#13#10;
  190.     repeat
  191.       Line := Page.GetString(LineNr);
  192.       TempStr := TempStr + Line;
  193.       LineNr := LineNr + 1;
  194.     until (pos('</td></tr>', Line) > 0);
  195.     TempStr := StringReplaceAll(TempStr, '<br>', #13#10);
  196.     TempStr := StringReplaceAll(TempStr, '<li>', #13#10#43#32);
  197.     HTMLRemoveTags(TempStr);
  198.   end;
  199.  
  200.   // Add Description to database
  201.   SetField(fieldDescription, TempStr);
  202.  
  203.   Page.Free;
  204.   DisplayResults;
  205. end;
  206.  
  207.  
  208.  
  209. function AddEpisodeTitles(Page: TStringList; var LineNr: Integer): string;
  210. var
  211.   Line: string;
  212.   EpTitle, EpAddress, TempNum: string;
  213.   StartPos: Integer;
  214. begin
  215.   Result := '';
  216.   repeat
  217.     LineNr := LineNr + 1;
  218.     Line := Page.GetString(LineNr);
  219.     StartPos := pos('</td><td nowrap valign=top class="small"> ', Line);
  220.     //Feature Movie add need it code
  221.     if StartPos = 0 then
  222.         Begin
  223.           StartPos := pos('</td><td nowrap class="small"> ', Line);
  224.           if StartPos > 0 then StartPos := StartPos + 31
  225.         end
  226.       else
  227.         StartPos := StartPos + 42;
  228.     if StartPos > 0 then
  229.     begin
  230.       TempNum := copy(Line, StartPos, pos('-', Line) - StartPos);
  231.       EpNumber := 'S';
  232.       If Length(TempNum) < 2 then EpNumber := EpNumber + '0';
  233.       EpNumber := EpNumber + TempNum;
  234.      
  235.       CutAfter(Line,'-');
  236.       TempNum := copy(Line, 1, pos('<', Line) - 1);
  237.       EpNumber := EpNumber + 'E';
  238.       If Length(TempNum) < 2 then EpNumber := EpNumber + '0';
  239.       EpNumber := EpNumber + TempNum;
  240.  
  241.       CutAfter(Line,'href="');
  242.       EpAddress := copy(Line, 1, pos('">', Line) - 1);
  243.       StartPos := pos('">', Line) + 2;
  244.       EpTitle := copy(Line, StartPos, pos('</a>', Line) - StartPos);
  245.       HTMLDecode(EpTitle);
  246.       if (pos(EpName,EpTitle) > 0) then
  247.       begin
  248.         Result := 'http://www.tvtome.com' + EpAddress;
  249.         Break;
  250.       end;
  251.       PickTreeAdd(EpNumber + ': ' + EpTitle, 'http://www.tvtome.com' + EpAddress);
  252.     end;
  253.     if Result <> '' then Break;
  254.   until ((pos('<tr><td colspan="6"> </td></tr>', Line) > 0) or (pos('</table>', Line) > 0));
  255. end;
  256.  
  257. procedure CutAfter(var Str: string; Pattern: string);
  258. begin
  259.   Str := Copy(str, Pos(Pattern, Str) + Length(Pattern), Length(Str));
  260. end;
  261.  
  262. function StringReplaceAll(S, Old, New: string): string;
  263. begin
  264.   while Pos(Old, S) > 0 do
  265.     S := StringReplace(S, Old, New);
  266.   Result := S;
  267. end;
  268.  
  269. begin
  270.   if CheckVersion(3,4,0) then
  271.   begin
  272.     if (GetField(fieldURL) <> '') then
  273.       AnalyzeEpisodePage(GetField(fieldURL))
  274.     else
  275.       begin
  276.         EpName := GetField(fieldOriginalTitle);
  277.         if (EpName = '') then
  278.           EpName := GetField(fieldTranslatedTitle);
  279.       end;
  280.     if (EpName = '') then Input('TV Tome Import', 'Enter the title of the episode:', EpName);
  281.       //AnalyzePage('http://www.tvtome.com/tvtome/servlet/EpisodeGuideServlet/showid-249/'); // Futurama
  282.       //AnalyzePage('http://www.tvtome.com/Simpsons/eplist.html'); // The Simpsons
  283.       AnalyzePage('http://www.tvtome.com/StargateSG1/eplist.html'); // Stargate SG-1
  284.       //AnalyzePage('http://www.tvtome.com/tvtome/servlet/EpisodeGuideServlet/showid-5382/'); // Garfield
  285.   end else
  286.     ShowMessage('This script requires a newer version of Ant Movie Catalog (at least the version 3.4.0)');
  287. end.
  288.  
  289.